////////////////////////////////////////////////////////////////////////////////
// Filename: basicgame.hpp
////////////////////////////////////////////////////////////////////////////////
#ifndef BASICGAME_HPP_
#define BASICGAME_HPP_

//////////////
// INCLUDES //
//////////////
#include "gameobject.hpp"
#include "../graphics/graphics.hpp"
#include <iostream>
////////////////////////////////////////////////////////////////////////////////
// Class name: BasicGame
////////////////////////////////////////////////////////////////////////////////
class BasicGame {
public:
	BasicGame(LPCSTR);
	~BasicGame();

	void Run();

private:
	virtual void Initialize(GameObject*, Graphics*); // Called once before gameloop starts. Initialize all res here.
	virtual void Shutdown(GameObject*, Graphics*); // Called once after quitting gameloop. Delete all res here.
	virtual void Update(GameObject*, Graphics*); //  Called in a fixed timespan relative to the machines power.
	virtual void Render(GameObject*, Graphics*); // Called as often as possible in the gameloop

	bool InitLoop();
	void ShutdownLoop();

	GameObject* m_gameObject;
	Graphics* m_graphics;
	LPCSTR m_applicationName;
};

#endif
